home *** CD-ROM | disk | FTP | other *** search
- #ifndef _LinkedList_h_
- #define _LinkedList_h_
-
-
- template< class T >
- class LinkListClass
- {
- public:
-
- T *FirstInList( void ); // returns the what is first in the list
- T *LastInList( void );
-
- protected:
-
- LinkListClass( void );
- ~LinkListClass( void );
-
- void RemoveFromList( T * );
- void TempRemoveFromList( T * );
- void MoveAfter( T * , T * );
- void MoveBefore( T *, T * );
- void AddToList( T * ); // all ready declare with new before passing;
- void DeleteAllList( void );
-
- T *FirstLink;
- T *LastLink;
- short howMany;
-
-
-
- };
-
- //------------------------------------------------------------------------------\\
- // LinkListClass :: LinkListClass ||
- // ||
- // Constructor - sets everything up ||
- // ||
- //------------------------------------------------------------------------------//
-
- template < class T >
- LinkListClass< T > :: LinkListClass( void )
- {
-
- howMany = 0;
- FirstLink = nil;
- LastLink = nil;
- }
-
- //------------------------------------------------------------------------------\\
- // LinkListClass :: ~LinkListClass ||
- // ||
- // Destructor - deletes all data in the list ||
- // ||
- //------------------------------------------------------------------------------//
-
- template< class T >
- LinkListClass< T > :: ~LinkListClass( void )
- {
- DeleteAllList();
- }
- //------------------------------------------------------------------------------\\
- // LinkListClass :: RemoveFromList ||
- // ||
- // Removes a link from the list ||
- // ||
- //------------------------------------------------------------------------------//
-
- template< class T >
- void LinkListClass< T > :: RemoveFromList( T *deleteMe )
- {
-
- if( deleteMe != nil )
- {
- // This is here so that it is saved
- if( LastLink == deleteMe )
- LastLink = deleteMe->previous;
-
- if( deleteMe->previous != nil )
- deleteMe->previous->next = deleteMe->next;
-
- if( deleteMe->next != nil )
- deleteMe->next->previous = deleteMe->previous;
-
-
- if( deleteMe == FirstLink )
- FirstLink = deleteMe->next;
-
- delete deleteMe;
-
- howMany--;
- }
- }
-
- //------------------------------------------------------------------------------\\
- // LinkListClass :: TempRemoveFromList ||
- // ||
- // Removes a link from the list - but doesnt delete it ||
- // ||
- //------------------------------------------------------------------------------//
-
- template< class T >
- void LinkListClass< T > :: TempRemoveFromList( T *removeMe )
- {
-
- if( removeMe != nil )
- {
- // This is here so that it is saved
- if( LastLink == removeMe )
- LastLink = removeMe->previous;
-
- if( FirstLink == removeMe )
- FirstLink = removeMe->next;
-
- if( removeMe->previous != nil )
- removeMe->previous->next = removeMe->next;
-
- if( removeMe->next != nil )
- removeMe->next->previous = removeMe->previous;
-
- howMany--;
- }
- }
-
- //------------------------------------------------------------------------------\\
- // LinkListClass :: MoveAfter ||
- // ||
- // puts b after a ||
- // ||
- //------------------------------------------------------------------------------//
-
- template< class T >
- void LinkListClass< T > :: MoveAfter( T *a , T *b )
- {
- if( a == b )
- return;
-
- if( a == LastLink )
- LastLink = b;
- else if( b = LastLink )
- LastLink = b->previous;
-
- if( b == FirstLink )
- FirstLink = b->next;
-
- if( b->next != NULL )
- b->next->previous = b->previous;
-
- if( b->previous != NULL )
- b->previous->next = b->next;
-
- if( a->next != NULL )
- a->next->previous = b;
-
- b->next = a->next;
- b->previous = a;
- a->next = b;
- }
-
- //------------------------------------------------------------------------------\\
- // LinkListClass :: MoveBefore ||
- // ||
- // puts b before a ||
- // ||
- //------------------------------------------------------------------------------//
-
- template< class T >
- void LinkListClass< T > :: MoveBefore( T *a , T *b )
- {
- if( a == b )
- return;
-
- if( a == FirstLink )
- FirstLink = b;
- else if( b == FirstLink )
- FirstLink = b->next;
-
- if( b == LastLink )
- LastLink = b->previous;
-
- if( b->next != NULL )
- b->next->previous = b->previous;
-
- if( b->previous != NULL )
- b->previous->next = b->next;
-
- if( a->previous != NULL )
- a->previous->next = b;
-
- b->next = a;
- b->previous = a->previous;
- a->previous = b;
- }
-
- //------------------------------------------------------------------------------\\
- // LinkListClass :: AddToList ||
- // ||
- // Adds to the list - make sure the data is already declared before ||
- // calling ||
- //------------------------------------------------------------------------------//
-
- template < class T >
- void LinkListClass< T > :: AddToList( T *newLink )
- {
-
- if( FirstLink != nil )
- FirstLink->previous = newLink;
- else
- LastLink = newLink; // This is here to save the first for later use
-
- newLink->next = FirstLink;
- newLink->previous = nil;
-
- FirstLink = newLink;
-
-
- howMany++;
- }
-
- //------------------------------------------------------------------------------\\
- // LinkListClass :: FirstInList ||
- // Returns the address of the last frsit in the list - ||
- // ||
- //------------------------------------------------------------------------------//
-
- template < class T >
- T *LinkListClass< T > :: FirstInList( void )
- {
- return( FirstLink );
- }
-
- //------------------------------------------------------------------------------\\
- // LinkListClass :: LastInList ||
- // Returns the address of the last link in the list - Needed? - ||
- // ||
- //------------------------------------------------------------------------------//
-
- template < class T >
- T *LinkListClass< T > :: LastInList( void )
- {
- return( LastLink );
- }
-
- //------------------------------------------------------------------------------\\
- // LinkListClass :: DeleteAllList ||
- // Deletes everything in the list - ||
- // ||
- //------------------------------------------------------------------------------//
-
- template <class T >
-
- void LinkListClass< T > :: DeleteAllList( void )
- {
- T *tempLink;
-
- while( FirstLink != nil )
- {
- tempLink = FirstLink->next;
- delete FirstLink;
- FirstLink = tempLink;
- }
- }
-
- #endif